package com.inventarios.dao;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.inventarios.dao.DAOUsuario;
import com.inventarios.hibernate.HibernateUtil;
import com.inventarios.modelos.Producto;
import com.inventarios.modelos.Usuarios;

public class DAOUsuarioImpl implements DAOUsuario{

	private static Logger logger = Logger.getLogger(DAOUsuarioImpl.class);
    
    /* (non-Javadoc)
     * @see com.inventarios.dao.DAOProducto#obtenerProducto()
     * 
     * Metodo de la clase DAOProducto para obtener un producto de la tabla producto
     * 
     */
    @SuppressWarnings("unchecked")
    
   @Override
    public List<Usuarios> obtenerUsuarios() {
            
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            List<Usuarios> encontradas = new ArrayList<Usuarios>();
            
            try {
//**********Validar que es from producto tabla o clase.*********************************************
                    encontradas = session.createQuery("from usuarios").list();
            } catch (HibernateException ex) {
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage());
            } finally {
                    session.close();
            }
            
            return encontradas;
    }

    /* (non-Javadoc)
     * @see com.inventarios.dao.DAOProducto#obtenerProducto(int)
     * 
     * MEtodo para la obtencion de un producto por su id
     */
    @Override
    public Usuarios obtenerUsuario(int id) {
    
            Session session = HibernateUtil.getSessionFactory().openSession();
            Usuarios encontrada = null;
            
            try {
                    encontrada = (Usuarios) session.get(Usuarios.class, id);
                    
            } catch (HibernateException ex) {
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage());
            } finally {
                    session.close();
            }
            
            return encontrada;
    }

    /* (non-Javadoc)
     * @see com.inventarios.dao.DAOProducto#guardarProducto(com.inventarios.model.Producto)
     * 
     * Con este metodo se guarda un producto en la tabla de bases de datos
     */
    @Override
    public void guardarUsuario(Usuarios usua) {
            
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            session.beginTransaction();
            
            try {
                    session.save(usua);
                    session.getTransaction().commit();
                    
            } catch (HibernateException ex) {
                    
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage() + " "+ " proceso relacionados con SQL utilizando JDNC");
            } finally {
                    session.close();
            }               
    }

    /* (non-Javadoc)
     * @see com.inventarios.DAOProducto#eliminarProducto(com.inventarios.model.Producto)
     * 
     * Con este metodo se elimina un producto de la tabla de bases de datos
     */
    @Override
    public void eliminarUsuario(Usuarios usua) {
            
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            session.beginTransaction();
            
            try {
                    session.delete(usua);
                    session.getTransaction().commit();
            } catch (HibernateException ex) {
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage());
            } finally {
                    session.close();
            }
            
    }

    /* (non-Javadoc)
     * @see com.inventarios.DAOProducto#editarProducto(com.invenatiors.model.Producto)
     * 
     * Con este metodo se editan los atributos de un producto en especifico 
     */
    @Override
    public void editarUsuario(Usuarios usua) {
            
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            session.beginTransaction();
            
            try {
                    session.merge(usua);
                    session.getTransaction().commit();
            } catch (HibernateException ex) {
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage());
            } finally {
                    session.close();
            }
            
    }

    /* (non-Javadoc)
     * @see com.inventarios.dao.DAOProducto#buscarProducto(java.lang.String)
     * Por medio de este metodo podremos buscar un producto especifico en la base de datos.
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<Usuarios> buscarUsuario(String cadena) {
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            Criteria criteria = session.createCriteria(Usuarios.class);
            List<Usuarios> encontradas = new ArrayList<Usuarios>();
            
            try {
                    criteria.add(Restrictions.like("nombre", "%"+cadena+"%"));
                    encontradas = criteria.list();
            } catch (HibernateException ex) {
                    logger.debug("Exception encontrada" + ex.getLocalizedMessage());
            } finally {
                    session.close();
            }
            
            return encontradas;
            
    }    
    	
	
}
